An embedded database system is a database management system that is integrated with a software application, or “application,” that requires access to stored data, such that the database system is “hidden” from the software application's end-user. Embedded databases that can handle structured query language (“SQL”) commands are typically single-threaded and single-processing. Implementations of embedded databases generally consist of one of the following interfaces: a linked static or dynamic native database library; one or more C or C++ native function calls; or a single application connection to a native database library.
These typical implementations suffer from the following drawbacks. First, in general, only one application can communicate with an embedded database at a given time. In the implementation, the embedded database cannot communicate with other applications while concurrently communicating with the first application. This is because only one application can modify the data stored in the embedded database at a time, in order to protect the integrity of data in the embedded database. Thus, when two or more applications are in contention to access the embedded database, one application generally blocks the other applications from accessing the embedded database.
Second, in order to communicate with the embedded database, an application, in general, is either required to know what type of database the embedded database is, or is required to communicate with an intermediary application (generally written in the C or C++ programming language), where the intermediary application is required to know what type of database the embedded database is. Thus, either the application, or its corresponding intermediary application, must include database functions that can communicate with a native database library of the embedded database.
Third, typical implementations involve loading a database library of the embedded database into either the application connecting to the embedded database or the intermediary application used to communicate with the embedded database. This leads to higher memory requirements when multiple applications are executing concurrently, as each application, or its corresponding intermediary application, is required to load the database library of the embedded application into memory.